import hljs from 'highlight.js'
import MarkdownIt from 'markdown-it'
// 自定义Vue语言高亮规则
function vueHighlight(hljs) {
	return {
		// 子语言，用于解析文件内的 <script> 和 <style> 标签
		subLanguage: 'xml',
		contains: [
			// 高亮 <template> 部分
			hljs.COMMENT('<!--', '-->'),
			{
				begin: /<template>/,
				end: /<\/template>/,
				subLanguage: 'xml',
				excludes: 'comment'
			},
			// 高亮 <script> 部分
			{
				begin: /<script>/,
				end: /<\/script>/,
				subLanguage: 'javascript',
				excludes: 'comment'
			},
			// 高亮 <style> 部分
			{
				begin: /<style>/,
				end: /<\/style>/,
				subLanguage: 'css',
				excludes: 'comment'
			}
			// 针对 Vue 单文件组件内可能的其他自定义块进行高亮
			// 这里可以添加更多的高亮规则
		]
	}
}

// 注册自定义的Vue语言扩展
hljs.registerLanguage('vue', vueHighlight)

// 现在在 MarkdownIt 实例中配置高亮函数时，可以添加对 'vue' 语言的支持

export const formatCode = (str) => {
	if (!str) {
		return '<p></p>'
	}
	var md = new MarkdownIt({
		highlight: function (str, lang) {
			const codeIndex = parseInt(Date.now()) + Math.floor(Math.random() * 10000000)
			if (lang && hljs.getLanguage(lang)) {
				try {
					return `<div class="code-txt-container"><div class="code-txt-head">${lang}<span class="copy-icon copy-btn" data-clipboard-action="copy" data-clipboard-target="#copy${codeIndex}"><i class="el-icon-copy-document"></i>复制</span></div><div class="code-txt-body">${
						hljs.highlight(lang, str).value
					}</div></div><textarea style="position:absolute;top: -9999px; left: -9999px; z-index: -9999;" id="copy${codeIndex}">${str.replace(/<\/textarea>/g, '&lt;/textarea')}</textarea>`
				} catch (err) {
					console.log(err)
				}
			} else {
				const preCode = md ? md.utils.escapeHtml(str) : str
				return `<div class="code-txt-container"><div class="code-txt-head"><span class="copy-icon copy-btn" data-clipboard-action="copy" data-clipboard-target="#copy${codeIndex}"><i class="el-icon-copy-document"></i>复制</span></div><div class="code-txt-body"><pre class="hljs"><code>${preCode}</code></pre></div></div><textarea style="position:absolute;top: -9999px; left: -9999px; z-index: -9999;" id="copy${codeIndex}">${str.replace(
					/<\/textarea>/g,
					'&lt;/textarea'
				)}</textarea>` // 使用额外的默认转义
			}
		}
	}).render(str)
	return md
}

export const ChatType = {
	user: 'user',
	robot: 'robot',
	suggestion: 'suggestion',
	clear: 'clear',
	functionCall: 'functionCall'
}
